import java.util.Scanner;

/**
 * @author spf
 * @date 2024/5/28
 * @time 19:37
 */
import java.util.HashSet;
import java.util.Scanner;

//public class CompletePermutation {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int T = scanner.nextInt(); // 读取样例数量
//
//        while (T-- > 0) {
//            int m = scanner.nextInt(); // 序列长度
//            int s = scanner.nextInt(); // 缺少的数字和
//            HashSet<Integer> present = new HashSet<>(); // 标记已出现的数字
//
//            // 读取序列中的数字
//            for (int i = 0; i < m; i++) {
//                int num = scanner.nextInt();
//                present.add(num);
//            }
//
//            // 计算完整的排列序列长度n
//            int n = m + (s > 0 ? 1 : 0); // 如果s大于0，则至少缺少一个数字
//
//            // 检查是否能够通过添加和为s的数字来补全序列
//            boolean canComplete = true;
//            int missingSum = 0;
//            for (int i = 1; i <= n; i++) {
//                if (!present.contains(i)) {
//                    missingSum += i; // 累加缺少的数字
//                }
//                // 如果缺少的数字和大于s，或者序列长度已经超过n，则无法补全
//                if (missingSum > s || present.size() + (n - i) > n) {
//                    canComplete = false;
//                    break;
//                }
//            }
//
//            // 输出结果
//            System.out.println(canComplete ? "YES" : "NO");
//        }
//
//        scanner.close();
//    }


//}
public class CompletePermutationChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int T = scanner.nextInt(); // 读取样例数量

        for (int test = 0; test < T; test++) {
            int m = scanner.nextInt(); // 序列长度
            int s = scanner.nextInt(); // 缺少的数字和
            HashSet<Integer> present = new HashSet<>(); // 标记已出现的数字

            // 读取序列中的数字
            for (int i = 0; i < m; i++) {
                int num = scanner.nextInt();
                present.add(num);
            }

            // 假设完整的排列序列长度n为m和s所能表示的最大值
            int n = Math.max(m, (int) (Math.sqrt(1 + 8 * s) / 2 - 0.5)); // 使用公式求解一元二次方程n*(n+1)/2 = m + s

            // 检查是否能够通过添加和为s的数字来补全序列
            boolean canComplete = true;
            int missingSum = 0;
            for (int i = 1; i <= n; i++) {
                if (!present.contains(i)) {
                    missingSum += i; // 累加缺少的数字
                }
                // 如果缺少的数字和大于s，或者已经添加了超过n-m个数字，则无法补全
                if (missingSum > s || present.size() + (n - i) > n) {
                    canComplete = false;
                    break;
                }
            }

            // 如果能补全，则输出YES，否则输出NO
            System.out.println(canComplete ? "YES" : "NO");
        }

        scanner.close();
    }
}